// 这里是 vue-flow 自定义的组件的types集合
import { markRaw } from 'vue';
import type { Node, Edge } from '@vue-flow/core';

import CommonNode from '../nodes/CommonNode.vue';
import NestNode from '../nodes/NestNode.vue';

import NumberInputNode from '../nodes/NumberInputNode.vue';
import NumberFunctionNode from '../nodes/NumberFunNode.vue';
import NumberResultNode from '../nodes/NumberResultNode.vue';

export enum HJNodeType {
  custom = 'custom',
  nest = 'nest',
  //   算数相关
  numberInput = 'number-input',
  numberFunction = 'number-function',
  numberResult = 'number-result',
}

export const nodeTypes = {
  [HJNodeType.custom]: markRaw(CommonNode),
  [HJNodeType.nest]: markRaw(NestNode),
  //   算数相关
  [HJNodeType.numberInput]: markRaw(NumberInputNode),
  [HJNodeType.numberFunction]: markRaw(NumberFunctionNode),
  [HJNodeType.numberResult]: markRaw(NumberResultNode),
};

// 用于Node 类型中的data，方便拓展选中 拖拽等数据
export interface HJNodeDataModel {
  label: string;
  isSelected: boolean;
  isDragging: boolean;
}

// 用于<VueFlow>组件的nodes属性的类型定义 从外部导入数据需要使用
export interface HJNodeData extends Node {
  jsonData?: string;
  data: HJNodeDataModel;
}

// 这个类型用于自定义node节点内部的数据结构，忽略一些数据能提升渲染时候的性能，
export type HJInterNodeData = Omit<HJNodeData, 'jsonData'>;
